package com.yuncool.service;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.yuncool.domain.ImageOss;
import com.yuncool.mapper.ImageOssMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.Date;
import java.util.UUID;

/**
 * @author ：chengccn
 * @date ：Created in 2019/8/14 16:17
 * @description：文件上传
 */
@Service
public class UploadService {
    @Autowired
    ImageOssMapper imageOssMapper;

    @Value("${aliyuncs.oss.endpoint}")
    public String endpoint;
    @Value("${aliyuncs.oss.ak}")
    public String ak;
    @Value("${aliyuncs.oss.as}")
    public String as;
    @Value("${aliyuncs.oss.bucket}")
    public String bucket;

    /**
     * 上传文件
     *
     * @param filename    文件名
     * @param inputStream 上传文件流
     * @param userId      用户id
     * @param userName    用户名字
     * @return oss文件上传地址
     */
    public String uplaod(String filename, InputStream inputStream, String userId, String userName) {
        try {
            ImageOss imageOss = new ImageOss();
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build("http://" + endpoint, ak, as);
            imageOss.setFilename(filename);
            //根据后缀名判断文件类型（准确 还是用了 谁改一下）
            String type = filename.substring(filename.lastIndexOf("."), filename.length());
            String ossfilename;
            // 修改阿里云存储文件名，主要目的是不重复
            if (StringUtils.isNotEmpty(type)) {
                ossfilename = UUID.randomUUID().toString().replace("-", "") + type;
            } else {
                ossfilename = UUID.randomUUID().toString().replace("-", "");
            }
            // 上传文件。<yourLocalFile>由本地文件路径加文件名包括后缀组成，例如/users/local/myfile.txt。
            ossClient.putObject(bucket, ossfilename, inputStream);

            imageOss.setOssFilename(ossfilename);
            imageOss.setCreateTime(new Date());
            imageOss.setUrl("https://" + bucket + "." + endpoint + "/" + ossfilename);
            imageOss.setUserId(userId);
            imageOss.setUserName(userName);
            imageOssMapper.insert(imageOss);

            // 关闭OSSClient。
            ossClient.shutdown();
            return imageOss.getUrl();
        } catch (OSSException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return "";
    }
}